Appendix: R Code
knitr::opts_chunk$set(
echo = FALSE,
message = FALSE,
warning = FALSE
)
library(tidyverse)
library(sf)
library(maps)
library(plotly)
library(here)
library(purrr)
library(lubridate)
library(zoo)
timeseries <- read_csv("https://coronadatascraper.com/timeseries-tidy.csv", col_types = "ffffdddcffDfd")
plot_data <- timeseries %>%
filter(state == "WI"| state %in% c("Hebei","Lombardia")) %>%
mutate(state = as.character(state),
county = as.character(county),
county = ifelse(is.na(county), state, county)) %>%
pivot_wider(names_from = "type",
values_from = "value") %>%
arrange(county, date) %>%
group_by(county, date) %>%
summarize(cases = sum(cases, na.rm = TRUE),
recovered = sum(recovered, na.rm = TRUE),
active = sum(active, na.rm = TRUE),
deaths = sum(deaths, na.rm = TRUE)) %>%
nest() %>%
mutate(data = purrr::map(data, function(df) mutate(df, new.cases = cases - lag(cases, default = cases[1]))),
data = purrr::map(data, function(df) mutate(df, roll.cases = rollapply(new.cases, list(-(0:6)), sum, fill = NA, align = "right", partial = FALSE)))) %>%
unnest() %>%
ungroup() %>%
rename(Name = county,
Date = date,
Cases = cases,
`New Cases (Last 7 Days)` = roll.cases)
gg <- plot_data %>%
ggplot() +
geom_point(aes(x = Cases, y = `New Cases (Last 7 Days)`,
group = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `New Cases (Last 7 Days)`),
color = "gray75",
alpha = 0.25,
size = 1) +
geom_line(aes(x = Cases, y = `New Cases (Last 7 Days)`,
group = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `New Cases (Last 7 Days)`),
color = "gray75",
alpha = 0.25,
show.legend = FALSE) +
geom_point(data = plot_data %>%
filter(Name %in% c("Dane County", "WI", "Hebei", "Lombardia")),
aes(x = Cases, y = `New Cases (Last 7 Days)`,
color = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `New Cases (Last 7 Days)`),
alpha = 0.75) +
geom_line(data = plot_data %>%
filter(Name %in% c("Dane County", "WI", "Hebei", "Lombardia")),
aes(x = Cases, y = `New Cases (Last 7 Days)`,
color = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `New Cases (Last 7 Days)`),
alpha = 0.75,
size = 1,
show.legend = FALSE) +
scale_x_log10() +
scale_y_log10() +
theme_bw()
ggplotly(gg, tooltip = c("label","label1","label2","label3","label4")) %>%
layout(showlegend = FALSE)
timeseries <- read_csv("https://coronadatascraper.com/timeseries-tidy.csv", col_types = "ffffdddcffDfd")
plot_data <- timeseries %>%
filter(state == "WI"| state %in% c("Hebei","Lombardia")) %>%
mutate(state = as.character(state),
county = as.character(county),
county = ifelse(is.na(county), state, county)) %>%
pivot_wider(names_from = "type",
values_from = "value") %>%
arrange(county, date) %>%
group_by(county, date) %>%
summarize(cases = sum(cases, na.rm = TRUE),
recovered = sum(recovered, na.rm = TRUE),
active = sum(active, na.rm = TRUE),
deaths = sum(deaths, na.rm = TRUE)) %>%
nest() %>%
mutate(data = purrr::map(data, function(df) mutate(df, new.cases = cases - lag(cases, default = cases[1]))),
data = purrr::map(data, function(df) mutate(df, roll.cases = rollapply(new.cases, list(-(0:6)), sum, fill = NA, align = "right", partial = FALSE)))) %>%
unnest() %>%
ungroup() %>%
mutate(`Average Daily Change (Last 7 Days)` = round(roll.cases/cases/7*100,2)) %>%
mutate(`Average Daily Change (Last 7 Days)` = ifelse(is.nan(`Average Daily Change (Last 7 Days)`), 0, `Average Daily Change (Last 7 Days)`)) %>%
rename(Name = county,
Date = date,
Cases = cases,
`New Cases (Last 7 Days)` = roll.cases) %>%
filter(`New Cases (Last 7 Days)` >= 0)
gg <- plot_data %>%
ggplot() +
geom_point(aes(x = Date, y = `Average Daily Change (Last 7 Days)`,
group = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
color = "gray75",
alpha = 0.25,
size = 1) +
geom_line(aes(x = Date, y = `Average Daily Change (Last 7 Days)`,
group = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
color = "gray75",
alpha = 0.25,
show.legend = FALSE) +
geom_point(data = plot_data %>%
filter(Name %in% c("Dane County", "WI", "Hebei", "Lombardia")),
aes(x = Date, y = `Average Daily Change (Last 7 Days)`,
color = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
alpha = 0.75) +
geom_line(data = plot_data %>%
filter(Name %in% c("Dane County", "WI", "Hebei", "Lombardia")),
aes(x = Date, y = `Average Daily Change (Last 7 Days)`,
color = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
alpha = 0.75,
size = 1,
show.legend = FALSE) +
scale_x_date(limits = plot_data %>%
summarize(max(Date) - 15,
max(Date) - 2) %>%
unlist() %>%
lubridate::as_date()) +
# scale_y_log10() +
theme_bw()
ggplotly(gg, tooltip = c("label","label1","label2","label3","label4")) %>%
layout(showlegend = FALSE)
timeseries <- read_csv("https://coronadatascraper.com/timeseries-tidy.csv", col_types = "ffffdddcffDfd")
plot_data <- timeseries %>%
filter(state == "WI"| state %in% c("Hebei","Lombardia")) %>%
mutate(state = as.character(state),
county = as.character(county),
county = ifelse(is.na(county), state, county)) %>%
pivot_wider(names_from = "type",
values_from = "value") %>%
arrange(county, date) %>%
group_by(county, date) %>%
summarize(cases = sum(cases, na.rm = TRUE),
recovered = sum(recovered, na.rm = TRUE),
active = sum(active, na.rm = TRUE),
deaths = sum(deaths, na.rm = TRUE)) %>%
nest() %>%
mutate(data = purrr::map(data, function(df) mutate(df, new.cases = cases - lag(cases, default = cases[1]))),
data = purrr::map(data, function(df) mutate(df, roll.cases = rollapply(new.cases, list(-(0:6)), sum, fill = NA, align = "right", partial = FALSE)))) %>%
unnest() %>%
ungroup() %>%
mutate(`Average Daily Change (Last 7 Days)` = round(roll.cases/cases/7*100,2)) %>%
mutate(`Average Daily Change (Last 7 Days)` = ifelse(is.nan(`Average Daily Change (Last 7 Days)`), 0, `Average Daily Change (Last 7 Days)`)) %>%
rename(Name = county,
Date = date,
Cases = cases,
`New Cases (Last 7 Days)` = roll.cases) %>%
filter(`New Cases (Last 7 Days)` >= 0)
gg <- plot_data %>%
ggplot() +
geom_point(aes(x = Cases, y = `Average Daily Change (Last 7 Days)`,
group = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
color = "gray75",
alpha = 0.25,
size = 1) +
geom_line(aes(x = Cases, y = `Average Daily Change (Last 7 Days)`,
group = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
color = "gray75",
alpha = 0.25,
show.legend = FALSE) +
geom_point(data = plot_data %>%
filter(Name %in% c("Dane County", "WI", "Hebei", "Lombardia")),
aes(x = Cases, y = `Average Daily Change (Last 7 Days)`,
color = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
alpha = 0.75) +
geom_line(data = plot_data %>%
filter(Name %in% c("Dane County", "WI", "Hebei", "Lombardia")),
aes(x = Cases, y = `Average Daily Change (Last 7 Days)`,
color = Name,
label = Name,
label2 = Date,
label3 = Cases,
label4 = `Average Daily Change (Last 7 Days)`),
alpha = 0.75,
size = 1,
show.legend = FALSE) +
scale_x_log10() +
theme_bw()
ggplotly(gg, tooltip = c("label","label1","label2","label3","label4")) %>%
layout(showlegend = FALSE)